El ejemplo específico que tengo incrementará obj[s] si es verdadero (tiene un valor), y si es falso (aún no existe en el objeto) lo establecerá en 1 y, por lo tanto, lo agregará al objeto.
Pero lo que estoy preguntando, en general, parece:
something = doIfTruthy || doIfFalseyEstoy pensando que debe tener un nombre, tal como llamamos a este "operador ternario o condicional"
something = condition? ifTrue: ifFalseMe gustaría poder referirme a él por un nombre propio en mis notas. En este momento solo lo llamo "explotar verdad/falsedad" porque así es como lo uso.
También me pregunto cómo llamas a este tipo de expresión, porque es similar:
something = condition && ifTruePuede consultar esta página en MDN para obtener más información sobre los operadores, pero la esencia de lo que está preguntando es:
A || Bse llama el operador "O lógico", donde ejecutará expresiones de izquierda a derecha hasta que encuentre una verdadera, devolviendo la primera expresión verdadera.
A && Bse llama el operador "Lógico AND", donde ejecutará expresiones de izquierda a derecha hasta que encuentre una falsa, devolviendo la última expresión verdadera.
Nota al margen:
Personalmente, no recomendaría seguir los pasos del autor del código escribiendo cosas como
obj[s] = ++obj[s] || 1, ya que aunque es conciso, se necesita leer un poco para entenderlo. Considere algo como:obj[s] ||= 0; ++obj[s];O:
obj[s] = (obj[s] || 0) + 1;O simplemente:
if (typeof obj[s] !== 'number') obj[s] = 0; ++obj[s];
para || operaciones , JS devolverá el PRIMER valor "veraz" que encuentre (leyendo de izquierda a derecha):
var bob = false || undefined || 0 || null || "hi" // ^ ^ ^ ^ ^ // nope nope nope nope yip // // => bob = "hi" // -------------- // breaking // -------------- var bob = false || "hi" || 0 || null || undefined // ^ ^ // nope yip <-- stops here // the rest are ignored // // => bob = "hi"Otro truco es usar && (y) para asegurarse de que algo existe antes de acceder a él.
Para las operaciones && , JS devolverá el ÚLTIMO valor "veraz" que encuentre (leyendo de izquierda a derecha).
Por ejemplo, si intenta leer una propiedad de un objeto de varios niveles.
var obj = { foo : { bar : "hi" } } var bob = obj && obj.foo && obj.foo.bar; // ^ ^ ^ // yip yip use this // // => bob = "hi" // -------------- // breaking: // -------------- var bob = obj && obj.foo && obj.foo.sally && obj.foo.bar; // ^ ^ ^ // yip yip nope <-- stops here, // ^ and returns the last "yip" // | the rest are ignored | // '-----------------------------------------------' // // => bob = obj.fooAmbos || y las operaciones && se leen de izquierda a derecha... por lo que puede tener cosas que normalmente generarían errores hacia el lado derecho, ya que JS simplemente dejará de leer de izquierda a derecha una vez que detecte un valor verdadero/falso.